﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Ferreteria.Forms
{
    public partial class FrmConsultarStock : Form
    {
        DisancoEntities context;

        //Tipos de busqueda
        const string nombre_y_categoria = "Nombre o Categoria";
        const string nombre = "Nombre del Articulo";
        const string categoria = "Categoría";
        const string rubro = "Rubro";
        const string codigo = "Código";
             
        public FrmConsultarStock()
        {
            InitializeComponent();

            cmbCategorias.Items.Add(nombre_y_categoria);
            cmbCategorias.Items.Add(nombre);
            cmbCategorias.Items.Add(categoria);
            cmbCategorias.Items.Add(rubro);
            cmbCategorias.Items.Add(codigo);

            cmbCategorias.SelectedIndex = 0;
            dgvArticulos.AutoGenerateColumns = false;

            cargarTabla();

            txbBuscar.Focus();
        }

        private void cargarTabla()
        {
            try
            {
                context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

                dgvArticulos.DataSource = context.VistaArticulos.Top("100");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            cmbCategorias.SelectedIndex = 0;
            txbBuscar.Text = "";

            cargarTabla();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            buscar();
        }

        private void FrmConsultarStock_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                e.Handled = true;
                this.btnBuscar_Click(sender,e);
            }

            if (e.KeyCode == Keys.F4)
            {
                e.Handled = true;
                txbBuscar.Focus();
                txbBuscar.Select();
            }

            if (e.KeyCode == Keys.F5)
            {
                e.Handled = true;
                btnLimpiar_Click(sender, e);
                txbBuscar.Focus();
                txbBuscar.Select();
            }
        }

        private void txbBuscar_TextChanged(object sender, EventArgs e)
        {
            buscar();
        }

        void buscar()
        {
            if (txbBuscar.Text == "")
            {
                cargarTabla();
            }
            else
            {
                if (txbBuscar.Text.Length > 2)
                {
                    try
                    {
                        context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

                        IEnumerable<VistaArticulos> articulosQuery;

                        string cadena = txbBuscar.Text;
                        string tipo_busqueda = (string)cmbCategorias.SelectedItem;

                        switch (tipo_busqueda)
                        {
                            case categoria:
                                articulosQuery = from vista in context.VistaArticulos
                                                 where vista.categ_nombre.Contains(cadena)
                                                 select vista;
                                break;
                            case rubro:
                                articulosQuery = from vista in context.VistaArticulos
                                                 where vista.rubro_nombre.Contains(cadena)
                                                 select vista;
                                break;
                            case nombre:
                                articulosQuery = from vista in context.VistaArticulos
                                                 where vista.art_nombre.Contains(cadena)
                                                 select vista;
                                break;
                            case codigo:
                                articulosQuery = from vista in context.VistaArticulos
                                                 where vista.art_codigo.Contains(cadena)
                                                 select vista;
                                break;
                            default:
                                articulosQuery = from vista in context.VistaArticulos
                                                 where vista.art_nombre.Contains(cadena) || vista.categ_nombre.Contains(cadena)
                                                 select vista;
                                break;
                        }

                        dgvArticulos.DataSource = articulosQuery;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
        }

        private void FrmConsultarStock_Load(object sender, EventArgs e)
        {
            txbBuscar.Focus();
        }
    }
}
